package com.dyna.digit.flowable.service;

import com.dyna.digit.flowable.domain.DefinitionsInfo;
import com.dyna.digit.flowable.domain.DeploymentEntity;
import com.dyna.digit.flowable.domain.DigitTask;
import com.dyna.digit.flowable.domain.param.TaskSubmitParam;
import com.dyna.digit.flowable.domain.request.TaskReq;
import com.dyna.digit.flowable.domain.vo.FlowHistoryVo;
import com.dyna.domain.resp.PageResult;

/**
 * @author zhoucaiwang
 */
public interface DigitFlowableService {

    /**
     * 部署流程
     * @param flowName 部署流程名
     * @param bpmnFile 工作流程部署文件
     * @return String
     */
    String deploy(String bpmnFile,String flowName);

    /**
     * 查询部署流程
     * @param name 流程名
     * @return Deployment
     */
    PageResult<DeploymentEntity> queryDeploys(String name);

    /**
     *
     * 获取流程定义信息
     * @param deployId  流程部署id
     * @return DefinitionsInfo
     */
    DefinitionsInfo definition(String deployId);

    /**
     * 创建任务
     * @param taskReq 任务信息
     * @return String
     */
    String startDefinition(TaskReq taskReq);

    /**
     *
     * 查询任务
     * @param key 流程定义id
     * @param assignee 流程定义id
     * @param projectId 项目id
     * @param projectName 项目名称
     * @return PageResult
     */
    PageResult<DigitTask> queryTask(String key, String assignee, Integer projectId, String projectName);

    /**
     * 完成任务
     * @param taskId 任务id
     * @param taskSubmitParam 变量
     */
    void compileTask(String taskId, TaskSubmitParam taskSubmitParam);

    /**
     *
     * 查询历史任务
     * @param id id
     * @return PageResult<FlowHistoryVo>
     */
    PageResult<FlowHistoryVo> queryHistoryTask(String id);


    /**
     * 删除任务
     * @param processInstanceId 流程实例id
     * @param reason 理由
     */
    void delTask(String processInstanceId,String reason);

    /**
     * 删除历史人物
     * @param processInstanceId 流程实例id
     */
    void delHistoryTask(String processInstanceId);
}
